package controller

import (
	"chitchat_http/model"
	"chitchat_http/server"
	"chitchat_http/util"
	"github.com/doujunyu/gogo/job"
	"github.com/doujunyu/gogo/sql_aid"
	_ "github.com/lib/pq"
)

// UserByLoginToUsername 用户登录
func UserByLoginToUsername(j *job.Job) {
	if j.Input["username"] == "" {
		j.JsonSuccess(nil, "账号不能为空")
		return
	}
	if j.Input["password"] == "" {
		j.JsonSuccess(j.Input, "密码不能为空")
		return
	}
	userLoginSql, args := sql_aid.PgTable(model.TableByUserLogin).Field("id", "user_id", "is_login", "password").Where("username = ?", j.Input["username"]).ToSql()
	userLogin, err := sql_aid.DataToMap(model.PgSql.Query(userLoginSql, args...))
	if err != nil || len(userLogin) == 0 {
		j.JsonError(nil, "账户不存在")
		return
	}
	//验证密码
	if err = util.CheckHash(userLogin[0]["password"].(string), j.Input["password"]); err != nil {
		j.JsonError(nil, "密码错误")
		return
	}
	if int(userLogin[0]["is_login"].(int64)) != model.UserLoginByIsLoginNormal {
		j.JsonError(nil, "账户已被禁用")
		return
	}
	//requestUrl := j.R.Header.Get("X-FORWARDED-FOR") //获取登录地址
	data, err := server.UserByLogin(userLogin[0]["user_id"].(int64),util.GetCurrentIP(j.R))
	if err != nil {
		j.JsonError(nil, err.Error())
		return
	}
	j.JsonSuccess(data)
}

// LoginByEmail 邮箱登录
func UserByLoginToEmail(j *job.Job) {
	if j.Input["e_mail"] == "" {
		j.JsonSuccess(nil, "邮箱不能为空")
		return
	}
	if j.Input["password"] == "" {
		j.JsonSuccess(j.Input, "密码不能为空")
		return
	}
	userLoginSql, args := sql_aid.PgTable(model.TableByUserLogin).Field("id", "user_id", "is_login", "password").Where("e_mail = ?", j.Input["e_mail"]).ToSql()
	userLogin, err := sql_aid.DataToMap(model.PgSql.Query(userLoginSql, args...))
	if err != nil || len(userLogin) == 0 {
		j.JsonError(nil, "账户不存在")
		return
	}
	//验证密码
	if err = util.CheckHash(userLogin[0]["password"].(string), j.Input["password"]); err != nil {
		j.JsonError(nil, "密码错误")
		return
	}
	if int(userLogin[0]["is_login"].(int64)) != model.UserLoginByIsLoginNormal {
		j.JsonError(nil, "账户已被禁用")
		return
	}
	data, err := server.UserByLogin(userLogin[0]["user_id"].(int64),util.GetCurrentIP(j.R))
	if err != nil {
		j.JsonError(nil, err.Error())
		return
	}
	j.JsonSuccess(data)
}

// UserByLoginToMobile 手机号登录
func UserByLoginToMobile(j *job.Job) {
	if j.Input["mobile"] == "" {
		j.JsonSuccess(nil, "手机号不能为空")
		return
	}
	if j.Input["password"] == "" {
		j.JsonSuccess(j.Input, "密码不能为空")
		return
	}
	userLoginSql, args := sql_aid.PgTable(model.TableByUserLogin).Field("id", "user_id", "is_login", "password").Where("mobile = ?", j.Input["mobile"]).ToSql()
	userLogin, err := sql_aid.DataToMap(model.PgSql.Query(userLoginSql, args...))
	if err != nil || len(userLogin) == 0 {
		j.JsonError(nil, "账户不存在")
		return
	}
	//验证密码
	if err = util.CheckHash(userLogin[0]["password"].(string), j.Input["password"]); err != nil {
		j.JsonError(nil, "密码错误")
		return
	}
	if int(userLogin[0]["is_login"].(int64)) != model.UserLoginByIsLoginNormal {
		j.JsonError(nil, "账户已被禁用")
		return
	}
	data, err := server.UserByLogin(userLogin[0]["user_id"].(int64),util.GetCurrentIP(j.R))
	if err != nil {
		j.JsonError(nil, err.Error())
		return
	}
	j.JsonSuccess(data)
}

// UserByRegisterToUsername 用户注册
func UserByRegisterToUsername(j *job.Job) {
	if j.Input["username"] == "" {
		j.JsonError(nil, "用户名不能为空")
		return
	}
	if j.Input["password"] == "" {
		j.JsonError(j.Input, "密码不能为空")
		return
	}
	//进行注册
	userId, err := server.UserByRegisterToUsername(j.Input["username"], j.Input["password"])
	if err != nil {
		j.JsonError(nil, err.Error())
		return
	}
	data, err := server.UserByLogin(userId,util.GetCurrentIP(j.R))
	if err != nil {
		j.JsonError(nil, err.Error())
		return
	}
	j.JsonSuccess(data)
	return

}

// UserByInfo 个人中心
func UserByInfo(j *job.Job) {
	list := make(map[string]interface{})
	userData,_ := model.UserByInfo(j.GroupData["user_id"].(int64))
	list["user"] = userData
	property,_ := model.UserPropertyByUser(j.GroupData["user_id"].(int64))
	list["property"] = property
	login,_ := model.UserLogByUser(j.GroupData["user_id"].(int64))
	list["login"] = login
	list["is_admin"] = j.GroupData["is_admin"].(int)
	j.JsonSuccess(list)
	return
}

// UserByChangeInfo 个人信息更改
func UserByChangeInfo(j *job.Job){
	err := server.UserByChangeInfo(j.GroupData["user_id"].(int64),j.Input)
	if err != nil {
		j.JsonError(nil,"更改失败")
		return
	}
	j.JsonSuccess()
	return
}

// UserByChangePassword 更改密码
func UserByChangePassword(j *job.Job) {
	if j.Input["password"] == "" {
		j.JsonError(j.Input, "密码不能为空")
		return
	}
	err := server.UserByChangePassword(j.GroupData["user_id"].(int64), j.Input["password"])
	if err != nil {
		j.JsonError(nil, err.Error())
		return
	}
	j.JsonSuccess()
	return
}

// UserByInfos 用户信息多个
func UserByInfos(j *job.Job){
	if j.Input["user_ids"] == "" {
		j.JsonError(j.Input, "没有数据")
		return
	}
	data := server.UserByInfos(j.GroupData["user_id"].(int64), j.Input["user_ids"])
	j.JsonSuccess(data)
	return
}

